home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / FWF / FileChooser / FChooserT.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  7KB  |  247 lines

  1. /*
  2.  * FChooserT.c : Test program for the FileChooser widget
  3.  *
  4.  * George Ferguson, ferguson@cs.rochester.edu, 21 Jan 1993.
  5.  *
  6.  * This program illustrates use of a FileChooser together with "Ok"
  7.  * and "Cancel" buttons, and with a Text widget for new filenames.
  8.  * Messages are printed to stdout whenever something is selected in
  9.  * in the FileChooser, or prior to exiting after selecting one of the
  10.  * buttons. Typing <Return> in the Text window is equivalent to
  11.  * clicking on "Ok". Note that it is the responsability of the program
  12.  * to keep the FileChooser and Text widget in sync -- the FileChooser
  13.  * knows nothing about buttons or Text widgets, deliberately.
  14.  * I added a menu for changing the sort mode, and another Text item
  15.  * for changing the filter pattern. I guess that makes this a bit overly
  16.  * complicated, but I wanted to show everything.
  17.  */
  18. #include <stdio.h>
  19. #include <X11/Intrinsic.h>
  20. #include <X11/StringDefs.h>
  21. #include <X11/Shell.h>
  22. #include <X11/Xaw/Form.h>
  23. #include <X11/Xaw/Label.h>
  24. #include <X11/Xaw/Command.h>
  25. #include <X11/Xaw/MenuButton.h>
  26. #include <X11/Xaw/SimpleMenu.h>
  27. #include <X11/Xaw/SmeBSB.h>
  28. #include <X11/Xaw/AsciiText.h>
  29. #include <Xfwf/FChooser.h>
  30.  
  31. static void selectionChangedCallback();
  32. static void okCallback(),cancelCallback();
  33. static void sortModeCallback();
  34. static void okAction();
  35. static void filterAction();
  36.  
  37. static XtAppContext appContext;
  38. static Widget toplevel;
  39. static Widget chooser;
  40. static Widget filterText,fileText;
  41.  
  42. static XtActionsRec actionTable[] = {
  43.     { "ok",    okAction },
  44.     { "filter",    filterAction },
  45. };
  46.  
  47. static char *sortMenuItemNames[] = {
  48.     "None", "Name", "Name, dirs first",
  49.     "Size, ascending", "Size, descending",
  50.     "Access, ascending", "Access, descending",
  51. };
  52.  
  53. main(argc,argv)
  54. int argc;
  55. char **argv;
  56. {
  57.     Widget form,button,menu,menuItem,label;
  58.     Arg args[4];
  59.     int i;
  60.  
  61.     toplevel = XtAppInitialize(&appContext,"FileChooserTest",
  62.                    NULL, 0,&argc,argv,NULL,NULL,0);
  63.     XtAppAddActions(appContext,actionTable,XtNumber(actionTable));
  64.  
  65.     form = XtCreateManagedWidget("form",formWidgetClass,toplevel,NULL,0);
  66.  
  67.     XtSetArg(args[0],XtNwidth,300);
  68.     chooser = XtCreateManagedWidget("chooser",xfwfFileChooserWidgetClass,
  69.                     form,args,1);
  70.     XtAddCallback(chooser,XtNcallback,selectionChangedCallback,NULL);
  71.  
  72.     XtSetArg(args[0],XtNlabel,"Ok");
  73.     XtSetArg(args[1],XtNfromHoriz,chooser);
  74.     XtSetArg(args[2],XtNvertDistance,40);
  75.     XtSetArg(args[3],XtNborderWidth,3);
  76.     button = XtCreateManagedWidget("ok",commandWidgetClass,form,args,4);
  77.     XtAddCallback(button,XtNcallback,okCallback,NULL);
  78.  
  79.     XtSetArg(args[0],XtNlabel,"Cancel");
  80.     XtSetArg(args[1],XtNfromHoriz,chooser);
  81.     XtSetArg(args[2],XtNfromVert,button);
  82.     button = XtCreateManagedWidget("cancel",commandWidgetClass,form,args,3);
  83.     XtAddCallback(button,XtNcallback,cancelCallback,NULL);
  84.  
  85.     menu = XtCreatePopupShell("sortMenu",simpleMenuWidgetClass,form,NULL,0);
  86.     for (i = 0; i < XtNumber(sortMenuItemNames); i++) {
  87.     XtSetArg(args[0],XtNlabel,sortMenuItemNames[i]);
  88.     menuItem = XtCreateManagedWidget("sortMenuItem",smeBSBObjectClass,
  89.                      menu,args,1);
  90.         XtAddCallback(menuItem,XtNcallback,sortModeCallback,(XtPointer)i);
  91.     }
  92.  
  93.     XtSetArg(args[0],XtNlabel,"Sort Mode");
  94.     XtSetArg(args[1],XtNfromHoriz,chooser);
  95.     XtSetArg(args[2],XtNfromVert,button);
  96.     XtSetArg(args[3],XtNmenuName,"sortMenu");
  97.     button = XtCreateManagedWidget("sort",menuButtonWidgetClass,form,args,4);
  98.  
  99.     XtSetArg(args[0],XtNlabel,"Filter:");
  100.     XtSetArg(args[1],XtNborderWidth,0);
  101.     XtSetArg(args[2],XtNfromVert,chooser);
  102.     label = XtCreateManagedWidget("filterLabel",labelWidgetClass,form,args,3);
  103.  
  104.     XtSetArg(args[0],XtNfromVert,chooser);
  105.     XtSetArg(args[1],XtNfromHoriz,label);
  106.     XtSetArg(args[2],XtNwidth,300);
  107.     XtSetArg(args[3],XtNeditType,XawtextEdit);
  108.     filterText = XtCreateManagedWidget("filterText",asciiTextWidgetClass,
  109.                        form,args,4); 
  110.     XtOverrideTranslations(filterText,
  111.          XtParseTranslationTable("<Key>Return: filter()"));
  112.  
  113.     XtSetArg(args[0],XtNlabel,"File:");
  114.     XtSetArg(args[1],XtNborderWidth,0);
  115.     XtSetArg(args[2],XtNfromVert,label);
  116.     label = XtCreateManagedWidget("fileLabel",labelWidgetClass,form,args,3);
  117.  
  118.     XtSetArg(args[0],XtNfromVert,filterText);
  119.     XtSetArg(args[1],XtNfromHoriz,label);
  120.     XtSetArg(args[2],XtNwidth,300);
  121.     XtSetArg(args[3],XtNeditType,XawtextEdit);
  122.     fileText = XtCreateManagedWidget("fileText",asciiTextWidgetClass,
  123.                      form,args,3);
  124.     XtOverrideTranslations(fileText,
  125.          XtParseTranslationTable("<Key>Return: ok()"));
  126.  
  127.     XtRealizeWidget(toplevel);
  128.     XtAppMainLoop(appContext);
  129.     /*NOTREACHED*/
  130. }
  131.  
  132. /*
  133.  * CALLBACKS:
  134.  */
  135.  
  136. /*ARGSUSED*/
  137. static void
  138. selectionChangedCallback(w,client_data,call_data)
  139. Widget w;
  140. XtPointer client_data;    /* not used */
  141. XtPointer call_data;    /* return struct */
  142. {
  143.     XfwfFileChooserReturnStruct *ret =
  144.     (XfwfFileChooserReturnStruct *)call_data;
  145.     Arg args[1];
  146.  
  147.     if (ret->directory == NULL || ret->file == NULL) {
  148.     printf("No selection\n");
  149.     XtSetArg(args[0],XtNstring,"");
  150.     } else {
  151.     printf("Directory: \"%s\"\n",ret->directory);
  152.     printf("File: \"%s\"\n",ret->file);
  153.     XtSetArg(args[0],XtNstring,ret->file);
  154.     }
  155.     XtSetValues(fileText,args,1);
  156. }
  157.  
  158. /*ARGSUSED*/
  159. static void
  160. okCallback(w,client_data,call_data)
  161. Widget w;
  162. XtPointer client_data;    /* not used */
  163. XtPointer call_data;    /* not used */
  164. {
  165.     Arg args[1];
  166.     char *dir,*file;
  167.  
  168.     printf("Ok!\n");
  169.     /* Get directory from chooser (or use XfwfFileChooserCurrentDirectory()) */
  170.     XtSetArg(args[0],XtNcurrentDirectory,&dir);
  171.     XtGetValues(chooser,args,1);
  172.     /* But get file from text item (might differ from XtNcurrentFile) */
  173.     XtSetArg(args[0],XtNstring,&file);
  174.     XtGetValues(fileText,args,1);
  175.     /* Sanity check */
  176.     if (dir == NULL || !*dir || file == NULL || !*file) {
  177.     printf("You need to select something before saying Ok!\n");
  178.     return;
  179.     }
  180.     /* Everything ok */
  181.     printf("Directory: \"%s\"\n",dir);
  182.     printf("File: \"%s\"\n",file);
  183.     /* Say goodbye */
  184.     XtDestroyApplicationContext(appContext);
  185.     exit(0);
  186. }
  187.  
  188. /*ARGSUSED*/
  189. static void
  190. cancelCallback(w,client_data,call_data)
  191. Widget w;
  192. XtPointer client_data;    /* not used */
  193. XtPointer call_data;    /* not used */
  194. {
  195.     printf("Cancel!\n");
  196.     XtDestroyApplicationContext(appContext);
  197.     exit(0);
  198. }
  199.  
  200. /*ARGSUSED*/
  201. static void
  202. sortModeCallback(w,client_data,call_data)
  203. Widget w;
  204. XtPointer client_data;    /* not used */
  205. XtPointer call_data;    /* item index == sort mode */
  206. {
  207.     int sortMode = (int)client_data;
  208.     Arg args[1];
  209.  
  210.     printf("Setting sort mode to %s\n",sortMenuItemNames[sortMode]);
  211.     XtSetArg(args[0],XtNsortMode,sortMode);
  212.     XtSetValues(chooser,args,1);
  213. }
  214.  
  215. /*
  216.  * ACTIONS:
  217.  */
  218.  
  219. /*ARGSUSED*/
  220. static void
  221. okAction(w,event,params,num_params)
  222. Widget w;
  223. XEvent *event;
  224. String *params;
  225. Cardinal *num_params;
  226. {
  227.     okCallback(NULL,NULL,NULL);
  228. }
  229.  
  230. /*ARGSUSED*/
  231. static void
  232. filterAction(w,event,params,num_params)
  233. Widget w;
  234. XEvent *event;
  235. String *params;
  236. Cardinal *num_params;
  237. {
  238.     Arg args[1];
  239.     char *s;
  240.  
  241.     XtSetArg(args[0],XtNstring,&s);
  242.     XtGetValues(filterText,args,1);
  243.     printf("Setting filter pattern to \"%s\"\n",s);
  244.     XtSetArg(args[0],XtNpattern,s);
  245.     XtSetValues(chooser,args,1);
  246. }
  247.